package com.cruise.game.common.enums;

import com.cruise.game.common.constants.OrderConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 订单状态枚举
 *
 * @author cruise
 * @date 2025-02-28
 */
@Getter
@AllArgsConstructor
public enum OrderStatusEnum {

    /**
     * 待接单
     */
    PENDING(OrderConstants.ORDER_STATUS_PENDING, "待接单"),

    /**
     * 进行中
     */
    IN_PROGRESS(OrderConstants.ORDER_STATUS_IN_PROGRESS, "进行中"),

    /**
     * 已完成
     */
    COMPLETED(OrderConstants.ORDER_STATUS_COMPLETED, "已完成"),

    /**
     * 售后中
     */
    AFTER_SALES(OrderConstants.ORDER_STATUS_AFTER_SALES, "售后中"),

    /**
     * 已取消
     */
    CANCELLED(OrderConstants.ORDER_STATUS_CANCELLED, "已取消");

    /**
     * 状态值
     */
    private final String value;

    /**
     * 状态描述
     */
    private final String desc;

    /**
     * 根据状态值获取枚举
     *
     * @param value 状态值
     * @return 枚举
     */
    public static OrderStatusEnum getByValue(String value) {
        for (OrderStatusEnum status : values()) {
            if (status.getValue().equals(value)) {
                return status;
            }
        }
        return null;
    }

    /**
     * 是否可以取消
     *
     * @param status 状态
     * @return 是否可以取消
     */
    public static boolean canCancel(String status) {
        return PENDING.getValue().equals(status);
    }

    /**
     * 是否可以接单
     *
     * @param status 状态
     * @return 是否可以接单
     */
    public static boolean canAccept(String status) {
        return PENDING.getValue().equals(status);
    }

    /**
     * 是否可以完成
     *
     * @param status 状态
     * @return 是否可以完成
     */
    public static boolean canComplete(String status) {
        return IN_PROGRESS.getValue().equals(status);
    }

    /**
     * 是否可以确认
     *
     * @param status 状态
     * @return 是否可以确认
     */
    public static boolean canConfirm(String status) {
        return COMPLETED.getValue().equals(status);
    }

    /**
     * 是否可以申请售后
     *
     * @param status 状态
     * @return 是否可以申请售后
     */
    public static boolean canAfterSales(String status) {
        return COMPLETED.getValue().equals(status);
    }

    /**
     * 是否可以评价
     *
     * @param status 状态
     * @return 是否可以评价
     */
    public static boolean canRate(String status) {
        return COMPLETED.getValue().equals(status);
    }
}
